#!/bin/bash

# 设置备份相关变量
BACKUP_DIR="/apps/backup"                    # 备份文件存储目录
SOURCE_DIR="/apps/docker-tmp/mysql"                      # 需要备份的源目录
DATE=$(date +%Y%m%d_%H%M%S)            # 获取当前时间作为备份文件名的一部分
BACKUP_NAME="mysql_backup_${DATE}.tar.gz"    # 备份文件名
LOG_FILE="/apps/backup/backup.log"         # 日志文件路径

mkdir -p /apps/backup

# 创建日志文件（如果不存在）
if [ ! -f "$LOG_FILE" ]; then
    touch "$LOG_FILE"
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 创建日志文件: $LOG_FILE" >> "$LOG_FILE"
fi

# 检查日志文件大小并清理
if [ -f "$LOG_FILE" ]; then
    # 获取日志文件大小（以字节为单位）
    LOG_SIZE=$(stat -c %s "$LOG_FILE" 2>/dev/null)
    # 100MB = 104857600 bytes
    if [ "$LOG_SIZE" -gt 104857600 ]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志文件大小超过100MB，正在清理..." >> "$LOG_FILE"
        rm "$LOG_FILE"
        touch "$LOG_FILE"
        echo "$(date '+%Y-%m-%d %H:%M:%S') - 日志文件已清理并重新创建" >> "$LOG_FILE"
    fi
fi

# 创建备份目录（如果不存在）
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p "$BACKUP_DIR"
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 创建备份目录: $BACKUP_DIR" >> "$LOG_FILE"
fi

# 执行备份
echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始备份..." >> "$LOG_FILE"

# 使用 tar 命令创建压缩备份
tar -czf "${BACKUP_DIR}/${BACKUP_NAME}" "$SOURCE_DIR" 2>> "$LOG_FILE"

# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份成功: ${BACKUP_NAME}" >> "$LOG_FILE"
    
    # 删除旧的备份文件
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 开始清理旧备份文件..." >> "$LOG_FILE"
    
    # 查找并删除旧的备份文件（保留最新的3个备份）
    cd "$BACKUP_DIR"
    ls -t mysql_backup_*.tar.gz | tail -n +4 | xargs -r rm -f
    
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 旧备份文件清理完成" >> "$LOG_FILE"
else
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份失败！" >> "$LOG_FILE"
fi 